package lin

import (
	"regexp"
)

type Z正则 struct {
	元素 *regexp.Regexp
}

func (类 *Z正则) C创建(条件语句 string) (返回_错误 error) {
	类.元素, 返回_错误 = regexp.Compile(条件语句)
	return
}

// 返回 匹配列表_带子项  [{"0":"匹配项1","1":"子_匹配项1","2":"子_匹配项2"},{"0":"匹配项2","1":"匹配项2的子_匹配项1","2":"匹配项2的_子匹配项2"}]
func (类 *Z正则) C创建_并执行(正则条件语句 string, 参数文本 string) (返回_列表 L列表, 返回_错误 error) {
	返回_列表.Q清空()
	类.元素, 返回_错误 = regexp.Compile(正则条件语句)
	if 返回_错误 != nil {
		return
	}
	结果 := 类.元素.FindAllStringSubmatch(参数文本, -1)
	for _, 成员 := range 结果 {
		表 := make(map[string]any)
		for i, v := range 成员 {
			表[全_类型.D到文本(i)] = v
		}
		返回_列表.T添加值(表)
	}
	return
}

// 返回 匹配列表_带子项  [{"0":"匹配项1","1":"子_匹配项1","2":"子_匹配项2"},{"0":"匹配项2","1":"匹配项2的子_匹配项1","2":"匹配项2的_子匹配项2"}]
// "0"键的值是全匹配值   后面 "1","2","3"...等键 对应子匹配项的值
func (类 *Z正则) Q取匹配列表_带子项(参数文本 string) (返回_列表 L列表) {
	返回_列表.Q清空()
	结果 := 类.元素.FindAllStringSubmatch(参数文本, -1)
	for _, 成员 := range 结果 {
		表 := make(map[string]any)
		for i, v := range 成员 {
			表[全_类型.D到文本(i)] = v
		}
		返回_列表.T添加值(表)
	}
	return
}

// [匹配项1,匹配项2,匹配项3]
func (类 *Z正则) Q取匹配列表(参数文本 string) (返回_列表 L列表) {
	返回_列表.Q清空()
	结果 := 类.元素.FindAllString(参数文本, -1)
	呵呵 := make([]any, len(结果))
	for i, v := range 结果 {
		呵呵[i] = v
	}
	返回_列表.ZR载入(呵呵)
	return
}

// 返回分割列表
func (类 *Z正则) P匹配_分割(参数文本 string) (返回_列表 L列表) {
	返回_列表.Q清空()
	结果 := 类.元素.Split(参数文本, -1)
	返回_列表.ZR载入(结果)
	return
}

func (类 *Z正则) J校验(参数文本 string) bool {
	return 类.元素.MatchString(参数文本)
}

func (类 *Z正则) P匹配_替换(参数文本, 替换文本 string) string {
	return 类.元素.ReplaceAllString(参数文本, 替换文本)
}
